home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / comm / irc / epic4.lha / doc / keys < prev    next >
Text File  |  2002-09-18  |  3KB  |  59 lines

  1. This document is here to explain the 'new' design of the key
  2. input/binding system.  The old system became rather cumbersome and hard to
  3. use, and didn't allow for certain effects that were deemed useful.
  4.  
  5. In other words, the ircII style meta-x keybindings are gone.  In their place
  6. is a NFA (non-deterministic finite-state automaton).  What this means is
  7. that it is now possible to bind a string of arbitrary length as a single
  8. keybinding without going through the hassle of the meta system.  It also
  9. makes it possible to bind sequence initiators independantly of other
  10. sequences (for example, you can now bind ^[ (esc) as well as ^[[11~ (or
  11. similar)).
  12.  
  13. The key mapping is now laid out in a way that facilitates fast lookups at
  14. any depth.  The client creates an array at each level necessary.  This can
  15. create some large memory use (depending on your definition of large) as each
  16. map will use 1K on 32 bit systems or 2k on 64 bit systems.  In other words,
  17. if you have either extremely long bind-strings or lots of different maps all
  18. over the place, your memory usage may become quite cumbersome.  A better way
  19. to handle this should probably be investigated.
  20.  
  21. Infrastructure is now in place to allow the user to create new binding
  22. symbols (SELF_INSERT, FORWARD_HISTORY, etc).  Bindings are no longer stored
  23. in a table, but are now in a linked list.  This should allow for both
  24. script and module created bindings to be placed into the client easily.
  25.  
  26. In general, I have tried to retain command compatibility with the old
  27. binding commands, however this was not always possible, and for the sake of
  28. extension I did not always do this.  The most obvious example is the fact
  29. that 'metaX' is now gone.  You can no longer bind to 'METAX_CHARACTER', and
  30. that whole system has been greatly changed.  In addition, some other changes
  31. have been made to extend functionality where possible.
  32.  
  33. -----------------------------------------------------------------------------
  34. What follows here is a list of examples of how to use the 'new' system, in a
  35. rather tightly integrated way.  For the most part, scripters will find this
  36. more useful than lay-users, and if you are interested in using the system as
  37. a normal user, you should instead refer to the client's helpfiles on the
  38. /bind command.
  39.  
  40. # Create a new keybinding function to act as a general 'cancel action'
  41. # command throughout the script.  The handling of this is, of course, left
  42. # to the scripter. :)
  43. if (bindctl(FUNCTION CANCEL_ACTION EXISTS)) {
  44.     echo *E* Binding function 'CANCEL_ACTION' already exists!
  45. } else {
  46.     @bindctl(FUNCTION CANCEL_ACTION CREATE some_scripted_alias)
  47. }
  48.  
  49. # Now bind escape to this new function.  Also, bind escape+1 - escape+0 to
  50. # window changing actions.  These will both work, now.
  51. bind ^[ cancel_action
  52. for xx in (1 2 3 4 5 6 7 8 9 0) {
  53.     @bindctl(SEQUENCE ^[$xx parse_command window refnum_or_swap $xx)
  54. }
  55.  
  56. # There are a lot more available uses for this system, and for full
  57. # documentation you should refer to the helpfiles for bind(4) and
  58. # bindctl(6).
  59.